main() {
  // slice(1, 5);
  slice(1, 5);
  slice(1, null); //必须有值可为null

  // 按位置传参，跟书写位置有关
  slice2(1, 5);

  // 按命名传参，step 和 end 跟书写位置无关
  slice3(1, step: 2, end: 5);
  // 按命名传参，step 和 end 跟书写位置无关
  slice3(1);
}

// 必传参数
int add(int a, int b) {
  return a + b;
}

// 可选参数经典错误， int? 等价于 int | null
void slice(int start, int? end) {
  print('切片开始索引$start, 结束索引$end');
}

// 可选位置参数
void slice2(int start, [int? end]) {
  print('切片开始索引$start, 结束索引$end');
}

// 可选命名参数(项目中较为常见)
void slice3(int start, {int? end, int? step}) {
  print('切片开始索引$start, 结束索引$end, 步长$step');
}
